package bgai.ai.minimax;

/**
 * Interfaccia per la valutazione delle board (nodi)
 */
public interface Evaluator {
	
	/**
	 * Valutazione euristica di uno stato
	 * @param board stato da valutare
	 * @param thisIsMaxNode true se questo nodo va valutato come nodo {@link BoardType.MAX}
	 * @return
	 */
	double evaluate(Board board, boolean thisIsMaxNode);

	/**
	 * Restituisce true se questo nodo e' "best" dal punto di vista di un 
	 * nodo MIN/MAX (a seconda del valore di {@code isMaxNode})
	 * @param board
	 * @param isMaxNode
	 * @return
	 */
	boolean hasBestQuality(Board board, boolean isMaxNode);
	/**
	 * Restituisce true se questo nodo e' "good" dal punto di vista di un 
	 * nodo MIN/MAX (a seconda del valore di {@code isMaxNode})
	 * @param board
	 * @param isMaxNode
	 * @return
	 */
	boolean hasGoodQuality(Board board, boolean isMaxNode);
	
	double upperBound();
	
	double lowerBound();
	
}
